#include <stdio.h>
#include <stdlib.h>

typedef struct LinkStack {
	int data;
	struct LinkStack* next;
} LinkStack;

//push
LinkStack* push(LinkStack* head,int data);

//pop
LinkStack* pop(LinkStack* head);

//display
void display(LinkStack* head);

int main()
{
	LinkStack* head=(LinkStack* )malloc(sizeof(LinkStack));
	head->data=1;
	head->next=NULL;
	for(int i=2;i<=5;i++)
	{
		push(head,i);
	}
	
	display(head);
	printf("======\n");
	pop(head);
	pop(head);
	pop(head);
	display(head);
	
	return 0;
	system("pause");
}

LinkStack* push(LinkStack* head,int data)
{
	//创建一个新的节点
	LinkStack* new_node=(LinkStack* )malloc(sizeof(LinkStack));
	new_node->data=data;
	new_node->next=NULL;
	//判断是否只有当前一个节点
	if(head->next==NULL)
	{
		head->next=new_node;
		return head;
	}
	
	//链表中有多个节点,找到最后一个节点
	LinkStack* tmp=head;
	while(tmp->next!=NULL)
	{
		tmp=tmp->next;
	} 
	
	tmp->next=new_node;
	new_node->next=NULL;
	return head;	 
}

void display(LinkStack* head)
{
	LinkStack* tmp=head;
	printf("当前栈中的元素为(不排序):\n");
	while(tmp!=NULL)
	{
		printf("%d\n",tmp->data);
		tmp=tmp->next;
	}
}

LinkStack* pop(LinkStack* head)
{
	//判断当前栈中是否存在元素
	if(head==NULL)
	{
		printf("栈中不存在元素\n");
		return NULL;
	} 
	
	//判断栈中是否只有一个元素
	if(head->next==NULL)
	{
		printf("该元素为栈中最后一个元素:%d\n",head->data);
		free(head);
		return NULL; 
	} 
	
	//遍历到最后一个元素前的一个节点node。删除node->next节点，并把node->next=NULL 
	LinkStack* tmp=head;
	while(tmp->next->next!=NULL)
	{
		tmp=tmp->next;
	}
	
	printf("POP:%d\n",tmp->next->data);
	free(tmp->next);
	tmp->next=NULL;
	return head;
}
